LinkedIn Company Page Post Scheduler
When a marketing post is approved in a SharePoint content calendar, the flow publishes it to the company LinkedIn page at the scheduled time, records the post URL back in SharePoint, and posts a confirmation to a Teams marketing channel. A weekly branch reminds the team of upcoming scheduled posts that still need assets.
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 publishes approved marketing content to a company LinkedIn page from a governed content calendar, then keeps the team informed. It is built as two cloud flows in one solution, both Off (demo) and fully wired so going live needs only connection authorization + environment-variable values.
A 15-minute publisher flow finds approved, due posts and publishes each to the LinkedIn company page, records the live post identifier back onto the calendar row, and confirms in a marketing Teams channel. A weekly readiness reminder flow scans upcoming approved posts that still lack assets and nudges the team in Teams.
Why it matters: Manual social posting is easy to forget and hard to govern. Driving LinkedIn from an approved calendar gives consistency, an approval trail, idempotent publishing (a post is never sent twice), and one place to manage the schedule.
> Build note — content calendar store. The original idea named a *SharePoint* content calendar. SharePoint list provisioning over REST is CORS-blocked from the maker origin in this tenant, so the content calendar is implemented as a Dataverse table (flowlibs_linkedinpostschedule) created inside this solution. This keeps the solution self-contained and tenant-portable, and is the documented FlowLibs substitution. To use a real SharePoint list instead, swap the Dataverse List records/Update a row actions for SharePoint Get items/Update item and repoint the calendar env var.
Use Case
A marketing team plans LinkedIn content in a calendar and wants approved posts auto-published on schedule, with the live link captured and the team notified — a clean, low-complexity, governed automation. A weekly reminder flags posts that are approved but still missing creative assets before their slot arrives.
Flow Architecture
Every 15 Minutes (publisher)
RecurrenceFlow 1 publisher: checks for due posts every 15 minutes.
Initialize config variables
Initialize variableBind company URN, calendar table set name, default visibility, and Teams group/channel ids from env vars.
Get Due Approved Posts
Dataverse ListRecordsApproved + due + not-yet-published rows (filter requires flowlibs_posturl eq null for idempotency).
Apply To Each Due Post → Publish To LinkedIn
LinkedIn V2 PostCompanyUpdateV2Iterates due posts (concurrency 1) and posts the article share to the company page.
Record Post URL
Dataverse UpdateRecordWrites back the live post id and Published status so a row is never re-posted.
Confirm In Teams
Teams PostMessageToConversationConfirmation card in the marketing channel.
Weekly Readiness Reminder (Flow 2)
Recurrence + Dataverse ListRecords + Condition + Teams PostMessageToConversationSecond flow runs weekly (Mondays 09:00): finds upcoming, unpublished posts still missing assets and nudges the team in Teams with the count + window.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_LinkedInCompanyUrn | String | urn:li:organization:0000000000 | Company page URN (post author). |
| flowlibs_LinkedInPostScheduleTable | String | flowlibs_linkedinpostschedules | Calendar table set name (List records). |
| flowlibs_LinkedInPostVisibility | String | PUBLIC | Default post visibility. |
| flowlibs_ReadinessLookaheadDays | String | 7 | Days ahead the reminder scans. |
| flowlibs_TeamsGroupId | String | <your-team-id> | Marketing Teams team (group) id. |
| flowlibs_TeamsChannelId | String | <your-channel-id> | Marketing Teams channel id. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| LinkedIn V2 | shared_linkedinv2 | 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.
- Text-only posts
- Leave flowlibs_articleurl empty and the post publishes as commentary only (drop the content/article/* parameters for a pure text share).
- Per-row visibility
- Add a visibility column to the table and bind body/visibility to it instead of the default env var.
- Media
- Attach an image/document (e.g. from SharePoint/OneDrive) to the LinkedIn post.
- Multi-network
- Fan the same approved row to X/Twitter or Facebook Pages with parallel actions.
- Approval gate
- Add an Approvals step that flips flowlibs_approvalstatus to Approved before a post is eligible.
- Real SharePoint calendar
- Swap the Dataverse actions for SharePoint Get items/Update item against a list with matching columns.
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-post filter (Flow 1)
Selects approved, due, not-yet-published rows.
EXPR.02Readiness filter (Flow 2)
Upcoming unpublished posts still missing assets.
EXPR.03Write-back id
Resolves the live post identifier to write back.
EXPR.04Reminder count
Number of posts still needing assets.
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.