ContactMonkey supports multiple distribution list and group types through two expansion methods: Graph Backend and EWS Backend. This reference guide helps you understand which lists work with each method and how to choose the right expansion approach. Click here for setup instructions.
Quick answer: Enable both Graph and EWS Backend for maximum compatibility with all your list types.
Compatibility Matrix
List/Group Type |
Graph Backend |
EWS Backend |
Notes |
| Static Distribution Lists | ✅ Supported | ✅ Supported | Standard distribution lists; best compatibility |
| Contact Group | ❌ Not Supported | ❌ Not Supported | Personal contact groups |
| Security Group | ✅ Supported | ✅ Supported | Used for permissions; can contain members |
| Universal Group | ✅ Supported | ✅ Supported | Cross-domain groups |
| Dynamic Distribution Lists | ❌ Not Supported | ✅ Supported | Membership determined by query rules |
| O365 Dynamic Group | ❌ Not Supported | ✅ Supported | Azure AD dynamic groups |
| O365 Group | ✅ Supported | ✅ Supported | Modern groups with shared resources |
| Distribution Groups with Hidden Memberships | ✅ Supported | ❌ Not Supported | Members not visible to non-members |
| External Recipients | ⚠️ Limited | ✅ Supported | See External Recipients |
| On-Premise Distribution Lists | ⚠️ Limited | ⚠️ Limited | Cloud-hosted lists recommended |
List Type Descriptions
Static Distribution Lists
What they are: Traditional distribution lists with a fixed, manually managed membership.
Characteristics:
- Members added/removed manually by administrators
- Can be nested (contain other distribution lists)
- Most common list type in organizations
Best expansion method: Either (both work equally well)
Example use cases:
- Department teams (e.g., Sales, Marketing)
- Project groups
- Location-based lists (e.g., NYC Office)
Contact Group
What they are: Personal contact groups created by individual users in Outlook.
Characteristics:
- Stored in user's mailbox
- Private to the user who created them
- Cannot be shared across organization
Best expansion method: Neither - click here to learn more
Security Group
What they are: Groups primarily used for assigning permissions, but can also be used for email distribution.
Characteristics:
- Managed in Microsoft Entra (Azure AD)
- Can have mail-enabled property
- Often used for SharePoint/Teams access
Best expansion method: Either (both work equally well)
Example use cases:
- Department-wide security and communication
- Resource access groups that also need email
- Role-based groups (e.g., "Managers")
Universal Group
What they are: Groups that can contain members from any domain in a multi-domain forest.
Characteristics:
- Cross-domain functionality
- Can be mail-enabled
- Common in large, multi-domain organizations
Best expansion method: Either (both work equally well)
Example use cases:
- Global company announcements
- Cross-subsidiary teams
- International project groups
Dynamic Distribution Lists
What they are: Lists whose membership is automatically determined by filter rules and queries.
Characteristics:
- Membership updates automatically based on criteria
- Rules based on user attributes (department, location, title, etc.)
- Members cannot be manually added/removed
- Only expandable via EWS
Best expansion method: EWS Backend only ⚠️
Example use cases:
- All employees in a specific department
- All users with a particular job title
- All users in a geographic location
Why Graph doesn't work: Microsoft Graph API does not support expanding dynamic distribution lists. This is a Microsoft limitation, not a ContactMonkey restriction.
O365 Dynamic Group
What they are: Azure AD dynamic groups with membership based on user or device properties.
Characteristics:
- Managed in Microsoft Entra (Azure AD)
- Membership rules based on attributes
- Similar to dynamic distribution lists but cloud-native
- Only expandable via EWS
Best expansion method: EWS Backend only ⚠️
Example use cases:
- All users with specific license assignments
- Automatically grouped by employment status
- Device-based groups (e.g., all iOS users)
Why Graph doesn't work: Same limitation as dynamic distribution lists; Graph API cannot expand membership determined by queries.
O365 Group (Modern Groups)
What they are: Modern collaboration groups with email, shared files, calendar, and potentially Teams/SharePoint integration.
Characteristics:
- Cloud-native Microsoft 365 groups
- Includes additional collaboration features beyond email
- Members have shared resources
Best expansion method: Either (both work equally well)
Example use cases:
- Project teams with shared workspace
- Department groups with collaboration needs
- Cross-functional teams
Distribution Groups with Hidden Membership
What they are: Distribution lists where membership is not visible to users outside the group.
Characteristics:
- Members cannot see who else is in the group (unless they're admins)
- Often used for privacy or security reasons
- Only expandable via Graph
Best expansion method: Graph Backend only ⚠️
Example use cases:
- Executive communications
- Confidential project teams
- HR or legal department lists
Why EWS doesn't work: EWS API does not have permission to access hidden membership information. Graph API, with proper delegated permissions, can access this data.
External Recipients
Behavior by Expansion Method
External recipients (email addresses outside your organization) have different support depending on your setup:
Graph Backend
Scenario |
Supported? |
| Overall tracking | ✅ Yes |
| Individual tracking with CSV upload | ✅ Yes |
| Individual tracking with addresses entered in To field | ❌ No |
⚠️ Guest accounts require additional enablement by the ContactMonkey Support team.
EWS Backend
Scenario |
Supported? |
| All tracking methods | ✅ Yes |
On-Premise Distribution Lists
- ❌ Generally not supported
- May work in hybrid configurations with limited functionality
- Microsoft APIs cannot reliably access on-premise resources
Migration Path
If you have on-premise distribution lists:
-
Option A: Migrate to Microsoft 365
- Move lists to Exchange Online
- Full ContactMonkey compatibility
- Recommended long-term solution
-
Option B: Use CSV Upload
- Export list members from on-premise Exchange
- Upload as CSV when sending via ContactMonkey
- Bypasses API expansion entirely
-
Option C: Use List Management
- Create equivalent lists in ContactMonkey
- Manually sync membership as needed
Nested Distribution Lists
What Are Nested Lists?
Nested lists are distribution lists that contain other distribution lists as members.
Example:
"All Staff" contains:
├── "Sales Team" (10 members)
├── "Marketing Team" (8 members)
└── "Support Team" contains:
├── "Tier 1 Support" (5 members)
└── "Tier 2 Support" (3 members)
Total unique recipients: 26Expansion Behavior
Both Graph and EWS Backend support nested lists:
- ContactMonkey recursively expands all nested lists
- Deduplicates recipients appearing in multiple lists
- Reports accurate unique recipient count
Performance Considerations
Nesting Level:
- 1-3 levels: Fast expansion (< 5 seconds)
- 4-7 levels: Moderate expansion (5-15 seconds)
- 8+ levels: Slower expansion (15+ seconds)
Best practice: Limit nesting to 3-4 levels for optimal performance.
Frequently Asked Questions
Q: Can I use both Graph and EWS for the same email?
A: No, you select one expansion method per email send. The method is chosen when you compose the email.
Q: What happens if I choose the wrong expansion method?
A: You may get an inaccurate recipient count, or the email may fail. Always run a test count to verify before sending.
Q: Can I convert a dynamic distribution list to a static one?
A: Yes, but you'll need to manually maintain membership. Work with your IT administrator to:
- Create a new static distribution list
- Copy current members from the dynamic list
- Update membership manually going forward
Q: Why does Microsoft limit Graph API for dynamic lists?
A: This is a Microsoft platform limitation. Dynamic list membership is calculated on-demand based on query rules, which Graph API doesn't support. EWS provides this capability through different underlying mechanisms.
Q: Can a distribution list be both hidden and dynamic?
A: Yes, but neither expansion method will work:
- Graph can't expand dynamic lists
- EWS can't access hidden membership
In this case, use CSV upload or contact your IT administrator to adjust the list configuration.
Q: How often does ContactMonkey check list membership?
A: List membership is expanded in real-time when you compose an email or run a test count. ContactMonkey doesn't cache list membership beyond a few minutes for performance optimization.