LinkedIn Scheduled Content Calendar Publisher
On a schedule, the flow reads the next due post from a content-calendar table (Dataverse/Excel/Sheet), posts it as a LinkedIn article (personal or company page per the row), marks it published, and notifies the marketing channel. Turns a content calendar into automated LinkedIn posting.
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 flow turns a Dataverse-backed content calendar into automated LinkedIn publishing. On an hourly schedule it reads the next due entry from the calendar table, posts it to LinkedIn as an article - on a personal profile or a company page depending on the row - marks the entry Published, and notifies the marketing Teams channel.
Why it matters: keeping a steady LinkedIn cadence by hand is error-prone. A calendar-driven publisher posts on time, every time, with no daily effort - and the calendar stays the single source of truth.
Ships Off (demo).
Use Case
A marketing/operations team plans LinkedIn posts in advance. Each planned post is a row in the content-calendar table with its commentary, the article it links to, the target (personal or company), the visibility, and a scheduled date/time. The flow publishes each row at the right time and reports back to the team channel.
Flow Architecture
Hourly Calendar Check
RecurrencePolls the content calendar on a schedule (every 1 hour).
Initialize Config & Now
Initialize variableBinds the calendar table and Teams group/channel, the default visibility, and a utcNow() snapshot for the due filter.
List Due Calendar Entries
Dataverse - ListRecordsStatus = Scheduled AND scheduled date <= now, ordered ascending, top 1.
Check If a Post Is Due
ConditionOnly proceeds when an entry is due; the empty False branch ends the run quietly.
Publish by Target
LinkedIn PostCompanyUpdateV2 / PostUpdateV2Resolves effective visibility, then posts to the company page (author = org URN) or the personal profile depending on the row's target.
Mark Published & Notify
Dataverse UpdateRecord + TeamsSets Status = Published with the publish timestamp and posts a summary to the marketing channel.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_LinkedInContentCalendarTable | String | flowlibs_linkedincontentcalendars | Entity-set name of the calendar table (used by ListRecords). |
| flowlibs_TeamsGroupId | String | <your-team-id> | Marketing Team (group) id for the notification. |
| flowlibs_TeamsChannelId | String | <your-channel-id> | Marketing channel id for the notification. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| shared_linkedinv2 | PostUpdateV2 PostCompanyUpdateV2 | |
| Microsoft Dataverse | shared_commondataserviceforapps | ListRecords UpdateRecord |
| 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.
- Cadence
- Change the recurrence interval (e.g. every 30 minutes, or weekday mornings only).
- Approval gate
- Insert an Approvals step before publishing high-stakes posts.
- Image/media posts
- Extend the table and content object to support image or document shares instead of article links.
- Capture the post id
- Parse the LinkedIn action output into flowlibs_posturn for later analytics or deletion.
- Multi-channel
- Add parallel branches to cross-post to other networks from the same calendar row.
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)
Selects the next scheduled, due entry.
EXPR.02Next due entry
The single due row to publish.
EXPR.03Effective visibility
Row visibility, or the default when blank.
EXPR.04Target test
Routes company vs personal posts.
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.