LinkedIn Approval-Gated Post Publishing
When a draft post is submitted (form/Teams), the flow routes it through a marketing/comms approval, and on approval posts the article to the chosen LinkedIn personal feed or company page, then records the published post and notifies the submitter. Adds governance and brand control to 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 adds governance and brand control to LinkedIn publishing. An employee submits a draft post as a row in a Dataverse table; the flow routes it through a comms/marketing approval, and only on approval publishes the article to the chosen personal profile or company page, then stamps the row Published and notifies the marketing Teams channel. Rejected posts are recorded and never published.
Why it matters: off-brand or unreviewed posts are a reputational risk. An approval gate ensures every LinkedIn post is reviewed before it goes live, with a full audit trail (approver outcome, comments, timestamps) kept in Dataverse.
Ships Off (Stopped).
Use Case
Employees draft LinkedIn posts but comms must approve before anything is published - especially to the company page. Each draft is a row in the Social Post table (commentary, article link/title/description, target, visibility, submitter). The flow handles review, publishing, logging, and notification automatically.
Flow Architecture
When a Draft Post Is Submitted
Dataverse - SubscribeWebhookTriggerFires when a new Social Post row is created (Create, organization scope).
Initialize Config & Visibility
Initialize variableBinds the comms approver, company page id and URN, post-log table, default/effective visibility, and Teams group/channel.
Request Comms Approval
Approvals - StartAndWaitForAnApprovalSends the draft to the approver and waits (Basic approval).
Check Approval Outcome
Conditionoutcome = Approve goes to the publish branch; else the reject branch.
Publish by Target (approved)
LinkedIn PostCompanyUpdateV2 / PostUpdateV2Branches on target to publish to the company page or personal profile.
Mark Published & Notify (approved)
Dataverse UpdateRecord + TeamsStamps Status = Published with outcome/comments/timestamps and posts an approved summary to the marketing channel.
Mark Rejected & Notify (rejected)
Dataverse UpdateRecord + TeamsStamps Status = Rejected with outcome/comments and notifies the channel; nothing is published.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_CommsApprover | String | comms@contoso.com | Email of the approver who reviews drafts. |
| flowlibs_CompanyPageId | String | <your-linkedin-org-id> | LinkedIn org id; builds urn:li:organization:{id}. |
| flowlibs_PostLogTable | String | flowlibs_socialposts | Entity-set name of the Social Post table. |
| flowlibs_TeamsGroupId | String | <your-team-id> | Marketing Team (group) id for notifications. |
| flowlibs_TeamsChannelId | String | <your-channel-id> | Marketing channel id for notifications. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Microsoft Dataverse | shared_commondataserviceforapps | SubscribeWebhookTrigger UpdateRecord |
| Approvals | shared_approvals | StartAndWaitForAnApproval |
| shared_linkedinv2 | PostUpdateV2 PostCompanyUpdateV2 | |
| 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.
- Tiered approval
- Add an exec-level approval for sensitive topics or company-page posts.
- Edit loop
- On rejection, route back to the submitter for revision instead of just logging.
- Approve now, post later
- Add a Delay or a scheduled companion flow keyed off Approved On.
- Capture the post id
- Parse the LinkedIn action output into flowlibs_posturn for later analytics or deletion.
- Submission channel
- Swap the Dataverse trigger for a Microsoft Forms OnNewResponse or a Teams message trigger if drafts come from there.
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.01Approved test
True when the draft was approved.
EXPR.02Target is company
Routes company vs personal posts.
EXPR.03Effective visibility
Row visibility, or the default when blank.
EXPR.04Approver comment
Captures the reviewer's comment.
EXPR.05Record id (for update)
The Social Post row to update.
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.