Mailchimp Campaign Approval Workflow
Before a Mailchimp campaign is sent, the flow routes the draft (subject, preview, audience size, send time) through a Power Automate approval to marketing leadership, posts the draft to a Teams channel for review, and only schedules/sends the campaign on approval. Records the sign-off. Adds governance to email sends.
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 to Mailchimp email sends. On a daily schedule it finds Mailchimp draft campaigns that are waiting to go out, posts each draft to a Teams review channel, routes it through a Power Automate Approval to marketing leadership, and only sends the campaign on approval - recording the sign-off (approver, comments, timestamp) back in Teams as the audit record.
Why it matters: Email mistakes (wrong audience, typos, bad timing) are public and costly. An approval gate catches them before send and creates an accountability record. This is a reference implementation showing how to wire Mailchimp + Approvals + Teams end-to-end.
Status: Built as an unmanaged solution, shipped Off (demo). Going live requires only connection authorization and environment-variable configuration.
Use Case
Marketing leadership wants a required sign-off before any Mailchimp campaign is sent, with a clear, durable audit trail of who approved what and when. Instead of a person manually checking and clicking Send in Mailchimp, the flow gathers the campaign facts (subject, internal title, from name, audience size, archive preview), presents them for approval, and executes the send automatically when approved.
Flow Architecture
Run On A Daily Schedule
Recurrence (Day/1, 08:00 ET)Polls daily for drafts awaiting approval.
Initialize Approver Email
Initialize Variable (String)Holds the approver email (env var).
Initialize Teams Group Id
Initialize Variable (String)Holds the Teams team/group ID (env var).
Initialize Teams Channel Id
Initialize Variable (String)Holds the Teams channel ID (env var).
Initialize Draft Status
Initialize Variable (String)Holds the Mailchimp draft status value (env var, default save).
Get Mailchimp Campaigns
Mailchimp — GetCampaignsRetrieves all campaigns for the account.
Filter Draft Campaigns
Query (Filter array)Keeps only campaigns whose status = draft status.
Apply to each Draft Campaign
ForeachProcesses each draft campaign.
Post Draft For Review To Teams
Microsoft Teams — PostMessageToConversationPosts the draft details to the review channel.
Start Campaign Approval
Approvals — StartAndWaitForAnApproval (Basic)Routes the draft to the approver and waits.
Check Approval Outcome
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_CampaignApproverEmail | String | marketing-lead@your-tenant.onmicrosoft.com | Email of the marketing leader who approves campaigns. |
| flowlibs_MailchimpDraftStatus | String | save | The Mailchimp status value that marks a draft awaiting approval. |
| flowlibs_TeamsGroupId | String | <your-team-id> | Teams team/group ID for the review channel. |
| flowlibs_TeamsChannelId | String | <your-channel-id> | Teams channel ID for review and sign-off records. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Mailchimp | shared_mailchimp | GetCampaigns sendcampaign |
| Approvals | shared_approvals | StartAndWaitForAnApproval |
| 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 for large sends
- Add a Condition on recipient_count against a threshold env var and require a second approver (or a manager chain) for big audiences.
- Pre-send checklist
- Extend the approval details with a checklist (test send done? links verified? UTM tags set?) and require the approver to confirm each.
- AI brand/tone check
- Before the approval, run the subject line + preview through Azure OpenAI and include the assessment in the approval request.
- Schedule instead of send
- Mailchimp also supports scheduling; swap sendcampaign for a schedule action and pass a send time captured at approval.
- Durable sign-off store
- Add a Dataverse table and CreateRecord to persist each sign-off (campaign id, approver, outcome, comments, timestamp) for reporting.
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.01Filter for drafts
Keeps only draft-status campaigns.
EXPR.02Approval outcome
Approve / Reject decision.
EXPR.03Approver comments
Reads the approver's comment.
EXPR.04Audience size (resilient)
Resilient audience-size read across shapes.
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.