Mailchimp List Hygiene and Cleaning
On a schedule, the flow scans a Mailchimp audience for problematic addresses (role-based, repeated soft bounces, invalid syntax, duplicates), archives or cleans them, reconciles with the Dataverse suppression list, and emails a hygiene report. Protects sender reputation and reduces wasted send volume.
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 keeps a Mailchimp audience clean and protects sender reputation. On a monthly schedule it scans the audience for problematic addresses - role-based locals (info@, admin@...), already unsubscribed/cleaned members, and low-engagement/repeated-bounce addresses - then archives the role-based ones and cleans the rest in Mailchimp, reconciles each remediated address to a Microsoft Dataverse suppression list, and emails a hygiene report.
Why it matters: A dirty list damages deliverability and wastes send volume/cost. Automated, repeatable hygiene with a CRM-reconciled suppression log keeps consent state auditable.
Status: Built and deployed as an Off demo. Going live requires only authorizing the three connections and setting the flowlibs_AudienceId environment variable.
Use Case
Marketing/Operations wants routine, automated list cleaning with reconciliation to a CRM suppression list and a summary report each run. The flow is a connector-first reference implementation (no inline fixture data) - every data fetch and write uses a real connector action.
Flow Architecture
Monthly Hygiene Recurrence
Recurrence (Month/1, 06:00 ET)Hygiene cadence.
Initialize Correlation Id
Initialize Variable (String) = guid()Run-trace id stamped on every suppression record.
Initialize Audience Id
Initialize Variable (String)Target Mailchimp list/audience.
Initialize Role Prefixes
Initialize Variable (Array)Role-based local-parts for membership checks.
Initialize Soft Bounce Limit
Initialize Variable (Integer)member_rating at/below = low-deliverability proxy.
Initialize Report Recipient
Initialize Variable (String)Configurable report mailbox.
List Members
Mailchimp — GetListMembersRead audience members (up to 1000).
Flag Problematic
Query (Filter array)Role-based OR unsubscribed/cleaned OR low member_rating.
Apply to each member
ForeachRemediate + log each flagged address.
Condition Is Role Based
IfRole-based goes to archive; otherwise to clean.
Archive Member
Mailchimp — removemember_v2Archive role-based address (not a hard delete).
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_AudienceId | String | REPLACE_WITH_AUDIENCE_ID | Mailchimp audience/list ID to clean. |
| flowlibs_RolePrefixes | String | info,admin,sales,support,billing,noreply | Comma-separated role-based local-parts to archive. |
| flowlibs_SoftBounceLimit | String | 2 | member_rating (1-5) at/below which an address is cleaned. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Mailchimp | shared_mailchimp | GetListMembers removemember_v2 updatemember_v2 |
| Microsoft Dataverse | shared_commondataserviceforapps | CreateRecord |
| Office 365 Outlook | shared_office365 | SendEmailV2 |
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.
- Real bounce data
- Replace the member_rating proxy with a built-in HTTP call to the Mailchimp Reports/Members API to read stats.soft_bounces/hard_bounces, comparing against flowlibs_SoftBounceLimit.
- Email-verification API
- Add a step to run borderline addresses through a verification service before cleaning.
- Dedupe merge
- Detect duplicate members and merge, keeping the most engaged.
- Quarantine
- Route borderline cases to an Approvals step for human review before archive/clean.
- Cadence
- Change the Recurrence frequency/interval to your hygiene schedule.
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.01Role-based check
True when the local-part is a role-based address.
EXPR.02Problematic filter (where)
Flags role-based, already-suppressed, or low-rating members.
EXPR.03Members scanned (report)
Count of scanned members.
EXPR.04Addresses remediated (report)
Count of remediated addresses.
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.