# Bulk email without duplicates

**URL:** <https://meta.discourse.org/t/bulk-email-without-duplicates/377604>\
**Category:** Product Support\
**Created:** [August 6, 2025, 7:31pm UTC](https://meta.discourse.org/t/bulk-email-without-duplicates/377604 "2025-08-06T19:31:16Z")\
**Posts on this page:** 1\
**Showing post:** 4

<div class="post-metadata">

**Author:** ![jahan\_gagan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jahan_gagan/32/501948_2.png) [@jahan\_gagan](https://meta.discourse.org/u/jahan_gagan)\
**Post date:** [August 7, 2025, 2:01pm UTC](https://meta.discourse.org/t/bulk-email-without-duplicates/377604/4 "2025-08-07T14:01:44Z")

</div>

Discourse provides a robust [REST API](https://docs.discourse.org/) that allows you to:

- List all users, groups, and user-group memberships
- Monitor new user registrations and group join/leave actions (via polling or webhooks)
- Retrieve category membership configurations

You can query either the full list or attempt to track recent changes. For full incremental change detection, you may need to implement time-based checks and manage differences locally. Authentication is handled through HTTP headers (`Api-Key`, `Api-Username`).

However, for more efficient and integrated control, I recommend creating a **custom Discourse plugin**. A plugin runs inside the Discourse server environment and provides direct access to Discourse internals, such as:

- User, group, and category membership updates
- Lifecycle event hooks for registrations and group changes
- Direct access to Discourse’s internal APIs and database

This approach gives you real-time capabilities and greater flexibility for implementing automated workflows like mail handling or user segmentation.

---

_[View the full topic](https://meta.discourse.org/t/bulk-email-without-duplicates/377604)._
